{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 一.原理\n",
    "异常检测的核心是找到那些“不合群”的点，为了对这些点的“不合群”程度进行刻画，我们需要将其转换为量化指标，如上一节的HBOS是通过概率的方式，概率分布越低的点越有可能是异常点，而孤立森林(Isolation Forest，简称IForest)则是借助于距离。iForest的出发点很朴素：我们对布满训练样本的空间，随机选取某一维度，并在该维度上的最小和最大值之间随机选择某一阈值对样本空间进行划分，该过程一直下去，直到每个样本被单独分离出来，如下图。\n",
    "![avatar](./source/20_iforest.jpg)  \n",
    "\n",
    "点$A'$与其他点聚集在一起，需要多次划分才能将其分离出来，而$B'$远离那些聚集的点，只需要少数的划分即可分割出来，所以样本被分离出来的切割次数越少则越有可能是异常点。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 二.孤立树的构建\n",
    "\n",
    "孤立森林由多颗孤立树集成，通常会随机采样部分样本来构建孤立树，孤立树的构建主要是如下两步：   \n",
    "\n",
    "（1）从训练数据中随机指定一个维度，并对该维度随机生成一个切割阈值（阈值介于该指定维度的最大值与最小值之间），然后将小于该阈值的数据划分至左节点，大于等于该阈值的数据划分至右节点；  \n",
    "（2）对左右节点重复（1）步，直到数据达到不可分的状态：1）仅一个样本或样本都一样 2）树达到指定深度（一般取$log_2 n$，$n$为训练样本量）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 三.异常值的定义\n",
    "\n",
    "异常值的定义如下：   \n",
    "\n",
    "$$\n",
    "Score(x)=2^{-\\frac{E(h(x))}{C(\\varphi)}}\n",
    "$$  \n",
    "\n",
    "这里，$h(x)$表示样本在孤立树中的深度，它的定义如下：   \n",
    "\n",
    "$$\n",
    "h(x)=e+C(T.size)\n",
    "$$  \n",
    "\n",
    "$e$表示根节点到叶子节点经过的边的数量，$T.size$表示叶子节点的样本量，$C(T.size)$可以理解为修正量，$C(\\cdot)$的定义如下：   \n",
    "\n",
    "$$\n",
    "C(n)=2H(n-1)-2(n-1)/n\\simeq 2ln(n-1)+2*0.5772156649-2(n-1)/n=2ln(n-1)+2/n-0.8455686702\n",
    "$$  \n",
    "\n",
    "另外，公式中的$\\varphi$表示单棵孤立数的训练样本数，$C(\\varphi)$做归一化用。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 四.代码实现  \n",
    "\n",
    "根据前面的讨论知道，重要的是这两部分，1）训练：构建孤立树，2）预测：评估异常值；代码就不贴了，放在ml_models.outlier_detect中..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.chdir('../')\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "from sklearn.datasets import make_classification\n",
    "from ml_models.outlier_detect import IForest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#造数据\n",
    "X, _ = make_classification(n_samples=1000, n_features=2,\n",
    "                           n_informative=2, n_redundant=0,\n",
    "                           n_repeated=0, n_classes=3,\n",
    "                           n_clusters_per_class=1, weights=[0.01, 0.05, 0.94],\n",
    "                           class_sep=0.8, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#训练\n",
    "iforest = IForest()\n",
    "iforest.fit(X)\n",
    "score = iforest.predict(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#预测\n",
    "import numpy as np\n",
    "thresh=np.percentile(score,95)#前5%设置为异常值\n",
    "plt.scatter(x=X[:, 0], y=X[:, 1], c=score > thresh)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 参考\n",
    "https://zhuanlan.zhihu.com/p/27777266  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
